package kr.pe.johnkim.waiting.mobile.dao;

import kr.pe.johnkim.waiting.mobile.domain.WaitingEvent;
import org.mybatis.spring.support.SqlSessionDaoSupport;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * Waiting 이벤트 관련 Dao 구현 클래스 이다.
 *
 * @author : John_Kim <cale9797@gmail.com>
 * @date : 13. 4. 24.
 */
@Repository
public class WaitingEventDaoImpl extends SqlSessionDaoSupport implements WaitingEventDao {

    // SLF4J Logging
    private Logger logger = LoggerFactory.getLogger(WaitingEventDaoImpl.class);

    /**
     * 이벤트를 등록 한다.
     *
     * @param waitingEvent
     */
    @Override
    public void registerEvent(WaitingEvent waitingEvent) {
        logger.info("registerEvent");
        this.getSqlSession().insert("WAITING_EVENTS.registerEvent", waitingEvent);
    }

    /**
     * 이벤트를 수정 한다.
     *
     * @param waitingEvent
     */
    @Override
    public void updateEventInformation(WaitingEvent waitingEvent) {
        logger.info("updateEventInformation");
        this.getSqlSession().update("WAITING_MEMBERS.updateEventInformation", waitingEvent);
    }

    /**
     * 이벤트 정보를 가져 온다.
     *
     * @param waitingEvent
     * @return
     */
    @Override
    public WaitingEvent selectEventInformation(WaitingEvent waitingEvent) {
        logger.info("selectEventInformation");
        return (WaitingEvent)this.getSqlSession().selectOne("WAITING_EVENTS.selectEventInformation", waitingEvent);
    }

    /**
     * 이벤트 목록을 가져 온다. 사용자의 smart phone 에 출력 된다.
     *
     * @param waitingEvent
     * @return
     */
    @Override
    public List<WaitingEvent> selectUserEventList(WaitingEvent waitingEvent) {
        logger.info("selectUserEventList");
        return this.getSqlSession().selectList("WAITING_EVENTS.selectUserEventList", waitingEvent);
    }

    /**
     * 이벤트 목록을 가져 온다. 가맹점의 iPad 에 출력 된다.
     *
     * @param waitingEvent
     * @return
     */
    @Override
    public List<WaitingEvent> selectMerchantEventList(WaitingEvent waitingEvent) {
        logger.info("selectMerchantEventList");
        return this.getSqlSession().selectList("WAITING_EVENTS.selectMerchantEventList", waitingEvent);
    }

    /**
     * 이벤트 활성화 여부를 업데이트 한다.
     *
     * @param waitingEvent
     */
    @Override
    public void updateEventActivateYn(WaitingEvent waitingEvent) {
        logger.info("updateEventActivateYn");
        this.getSqlSession().update("WAITING_EVENTS.updateEventActivateYn", waitingEvent);
    }
}
